import UIKit
//import RxAlamofire
 
class ViewController: UIViewController {
 
//    private let disposeBag = DisposeBag()
//
//    @objc var str: String = ""
//
//    //与数据相关的错误类型
//    enum DataError: Error {
//        case cantParseJSON
//    }
//
//    override func viewDidLoad() {
//        super.viewDidLoad()
//
//        //创建URL对象
//        let urlString = "https://github.com/ReactiveX/RxSwift"
//        let url = URL(string:urlString)!
//
//        let requestBtn = UIButton(type: .custom)
//        requestBtn.backgroundColor = UIColor.orange
//        requestBtn.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
//        requestBtn.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 4))
//        view.addSubview(requestBtn)
//
//        let cancelBtn = UIButton(type: .custom)
//        cancelBtn.backgroundColor = UIColor.purple
//        cancelBtn.frame = CGRect(x: 100, y: 220, width: 100, height: 100)
//        view.addSubview(cancelBtn)
//
//        let label = UILabel()
//        label.text = "abc"
//        label.textColor = UIColor.black
//        label.frame = CGRect(x: 200, y: 200, width: 100, height: 100)
//        view.addSubview(label)
//
//
//        requestBtn.rx.tap.flatMap {
//            request(.get, url)
//                .responseString()
//                .takeUntil(cancelBtn.rx.tap)
//        }.subscribe(onNext: { (response, data) in
//            print("请求成功！返回的数据是：", data)
//        }, onError: { (error) in
//            print("请求失败！错误原因：", error)
//        }).disposed(by: disposeBag)
//
//
//        getPropertyNames()
//
//        test()
//
//
//        Observable<Int>
//            .interval(.seconds(1), scheduler: MainScheduler.instance)
//            .map { $0 }
//            .bind { (num) in
//                requestBtn.setTitle("\(num)", for: .normal)
//            }.disposed(by: disposeBag)
//
//        Observable<Int>
//            .interval(.seconds(1), scheduler: MainScheduler.instance)
//            .map { "\($0 + 100)" }
//            .bind(to: Binder(cancelBtn) { (btn, text) in
//                btn.setTitle(text, for: .normal)
//            }).disposed(by: disposeBag)
//
//
//        //Observable序列（每隔0.5秒钟发出一个索引数）
//        let observable = Observable<Int>.interval(0.5, scheduler: MainScheduler.instance)
//        observable
//            .map { "\($0)" }
//            .bind(to: label.rx.text) //根据索引数不断变放大字体
//            .disposed(by: disposeBag)
//
//        getData(channel: "").subscribe { (event) in
//            switch event {
//            case .success(let json):
//                print("请求成功：\(json)")
//            case .error(let error):
//                print("请求失败，错误：\(error)")
//            }
//        }.disposed(by: disposeBag)
//
//
//        let textField = UITextField()
//
//        let label2 = UILabel()
//
//
//        textField.rx.text.bind(to: label2.rx.text)
//            .disposed(by: disposeBag)
//
//
//        //创建文本标签
//        let label3 = UILabel(frame:CGRect(x:20, y:40, width:300, height:100))
//        self.view.addSubview(label)
//
//        //创建一个计时器（每0.1秒发送一个索引数）
//        let timer = Observable<Int>.interval(.milliseconds(100), scheduler: MainScheduler.instance)
//
//        //将已过去的时间格式化成想要的字符串，并绑定到label上
//        timer.map{ String(format: "%0.2d:%0.2d.%0.1d",
//                          arguments: [($0 / 600) % 600, ($0 % 600 ) / 10, $0 % 10]) }
//            .bind(to: label3.rx.text)
//            .disposed(by: disposeBag)
//
//
//
//    }
//
//
//    func getData(channel: String) -> Single<[String: Any]> {
//        return Single.create { (single) -> Disposable in
//
//            let url = "https://douban.fm/j/mine/playlist?"
//                        + "type=n&channel=\(channel)&from=mainsite"
//
//            let task = URLSession.shared.dataTask(with: URL(string: url)!) { data, _, error in
//                if let error = error {
//                    single(.error(error))
//                    return
//                }
//
//                guard let data = data,
//                      let json = try? JSONSerialization.jsonObject(with: data,
//                                                                   options: .mutableLeaves),
//                      let result = json as? [String: Any] else {
//                    single(.error(DataError.cantParseJSON))
//                    return
//                }
//
//                single(.success(result))
//            }
//
//            return Disposables.create {
//                task.cancel()
//            }
//        }
//
//
//        Observable.of(1)
//            .asObservable()
//            .subscribe { (event) in
//                print(event)
//            }.disposed(by: disposeBag)
//    }
//
//    // MARK: -1
//    /// 1
//    func test() {
//        //创建URL对象
//        let urlString = "https://www.douban.com/j/app/radio/channels"
//        let url = URL(string:urlString)!
//
////        request(.get, url)
////            .data()
////            .subscribe(onNext: { (data) in
////                let str = String(data: data, encoding: .utf8)
////                print("请求成功，返回的数据是：", str ?? "")
////            }, onError: { (error) in
////                print(error)
////            }).disposed(by: disposeBag)
//
//
////        requestData(.get, url)
////            .subscribe(onNext: { (response, data) in
////
////                if 200 ..< 300 ~= response.statusCode {
////                    let str = String(data: data, encoding: .utf8)
////                    print("请求成功，返回的数据是：", str ?? "")
////                } else {
////                    print("请求失败！")
////                }
////            }).disposed(by: disposeBag)
//
//        request(.get, url)
//            .responseString()
//            .subscribe(onNext: { (reponse, str) in
//                print(str)
//            }, onError: { (error) in
//                print(error)
//            }).disposed(by: disposeBag)
//
//        requestString(.get, url)
//            .subscribe(onNext: { (response, str) in
//                if 200 ..< 300 ~= response.statusCode {
//                    print("请求成功，返回的数据是：", str)
//                } else {
//                    print("请求失败！")
//                }
//            }).disposed(by: disposeBag)
//
//
//        Observable.of("A", "B", "C").subscribe(onNext: { element in
//            print(element)
//        })
//
//
//
//    }
//
//    func test1() {
//        //创建文本输入框
//        let inputField = UITextField(frame: CGRect(x:10, y:80, width:200, height:30))
//        inputField.borderStyle = UITextField.BorderStyle.roundedRect
//        self.view.addSubview(inputField)
//
//
//        //创建文本输出框
//        let outputField = UITextField(frame: CGRect(x:10, y:150, width:200, height:30))
//        outputField.borderStyle = UITextField.BorderStyle.roundedRect
//        self.view.addSubview(outputField)
//
//        //创建文本标签
//        let label = UILabel(frame:CGRect(x:20, y:190, width:300, height:30))
//        self.view.addSubview(label)
//
//        //创建按钮
//        let button:UIButton = UIButton(type:.system)
//        button.frame = CGRect(x:20, y:230, width:40, height:30)
//        button.setTitle("提交", for:.normal)
//        self.view.addSubview(button)
//
//        //当文本框内容改变
//        let input = inputField.rx.text
//            .orEmpty
//            .asDriver()
//            .throttle(.milliseconds(300))
//
//        // 内容绑定到另一个输入框中
//        input.drive(outputField.rx.text)
//            .disposed(by: disposeBag)
//
//        // 内容绑定到文本标签中
//        input.map { "当前数据:\($0.count)" }
//            .drive(label.rx.text)
//            .disposed(by: disposeBag)
//
//        // 根据内容字数决定按钮是否可用
//        input.map { $0.count > 0 }
//            .drive(button.rx.isEnabled)
//            .disposed(by: disposeBag)
//    }
//
//    func test2() {
//        //创建文本输入框
//        let textField = UITextField(frame: CGRect(x:10, y:80, width:200, height:30))
//        textField.borderStyle = UITextField.BorderStyle.roundedRect
//        self.view.addSubview(textField)
//
//        textField.rx.text.orEmpty.subscribe { (event) in
////            print($0.element)
//        }
//
//        //当文本框内容改变时，将内容输出到控制台上
//        textField.rx.text.orEmpty.asObservable()
//            .subscribe(onNext: {
//                print("您输入的是：\($0)")
//            })
//            .disposed(by: disposeBag)
//    }
}


extension UILabel {
    public var fontSize: Binder<CGFloat> {
        return Binder(self) { label, fontSize in
            label.font = UIFont.systemFont(ofSize: fontSize)
        }
    }
}
